#include "stm32f10x.h"                  // Device header
#include "Serial.h"
#include "Delay.h"
#include "Timer.h"
#include "OLED.h"
#include "Led.h"
#include "Beep.h"
#include "KeyExti.h"
#include "DHT11.h"
#include "BH1750.h"

DHT11_Humi_Temp DHT11_Data;//使用DHT11.h里的结构体定义全局变量

uint8_t Alarm_Flag = 0;//报警标志位
uint8_t Alarm_Free = 7;//报警器是否手动操作，如果手动操作及时设置为0

int main(void)
{
	OLED_Init();
	Serial_Init();
	Timer2_Init();
	Timer3_Init();
	Led_Init();
	Beep_Init();
	KeyExti_Init();
	DHT11_Init();
	BH1750_Init();
	
	//上电鸣笛一声
	Beep_On();
	Delay_ms(40);
	Beep_Off();
	Led1_On();
	Delay_ms(20);
	
	Led1_Off();
	
	while (1)
	{
		if(DHT11_HumiAndTemp_Data(&DHT11_Data) == SUCCESS)
		{
			//通过串口将温湿度数据发送到电脑
			Serial_Printf("\r\n读取DHT11成功!\r\n湿度: %d.%d RH\r\n温度: %d.%d ℃ ",
							DHT11_Data.Humi_Int,DHT11_Data.Humi_Dec,DHT11_Data.Temp_Int,DHT11_Data.Temp_Dec);
		}
		else if(DHT11_HumiAndTemp_Data(&DHT11_Data) == ERROR)
		{
			Serial_Printf("\r\n读取DHT11失败!\r\n");
		}
		/*调用read_BH1750读取光照度*/
		BH1750_read();//读取BH1750的光强数据
		Serial_Printf("\r\n读取BH1750成功!\r\n光照: %d.%d lx\r\n",(uint16_t)temp1,(uint16_t)temp2);
		
		if(Alarm_Free == 7)//如果Alarm_Free = 7进入自动监控模式
		{
			//设置所测数据的阈值，超过阈值发生报警
			if(DHT11_Data.Humi_Int<60 && DHT11_Data.Temp_Int<30 && temp1<100)
			{
				Alarm_Flag = 0;
			}
			else
			{
				Alarm_Flag = 1;
			}
		}
		else if(Alarm_Free < 7)//按键按下Alarm_Free = 0，之后在主函数自增到7进入检测模式
		{
			Alarm_Free++;
		}
		
		Delay_ms(1000);
	}
}
